home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 1833 / 1833.xpi / chrome / yoono.jar / content / yoono / yoonoGlobCommon.js < prev    next >
Text File  |  2009-12-16  |  6KB  |  194 lines

  1. /**
  2.  Global stuff for both yoono toolbar and side panel
  3.  @author : Xavier Grosjean
  4.  Copyright 2006, Yoono SAS.
  5.  **/
  6.  
  7. // XG: In order not to spread all global variables in the common environment, I keep them all 
  8. // inside an object. It's then much easier to find them with DomInspector
  9. // however, I won't retro-apply this to all previous globs to avoid regression
  10.  
  11. var yoonoGlob = {};
  12. yoonoGlob.flagDebug = true; // can be modified with Dom Inspector...
  13. yoonoGlob.debug = function(msg) {
  14.   if (yoonoGlob.flagDebug) {
  15.     window.dump(msg + "\n");
  16.   }
  17. }
  18. var extId = '{d9284e50-81fc-11da-a72b-0800200c9a66}';
  19. var extmgr = Components.classes['@mozilla.org/extensions/manager;1'].getService(Components.interfaces.nsIExtensionManager);
  20. yoonoGlob.version = extmgr.getItemForID(extId).version;
  21. yoonoGlob.WMED = Components.classes['@mozilla.org/appshell/window-mediator;1'].getService(Components.interfaces.nsIWindowMediator);
  22.  
  23. yoonoGlob.scriptLoadingService = Components.classes["@mozilla.org/moz/jssubscript-loader;1"].getService(Components.interfaces.mozIJSSubScriptLoader);
  24.  
  25. // Ouverture en fonction du choix de l'utilisateur en prefs
  26. yoonoGlob.openUrlAccordingToPref = function(url, event, openMode) {
  27.   var pref = '';
  28.   try {
  29.     pref = YNPREFBRANCH.getCharPref("reco.display-mode");
  30.   } catch(e) {
  31.     pref = openMode;
  32.   }
  33.   if('defaults' == pref) pref = openMode;
  34.  
  35.   switch (pref) {
  36.     case 'new-window':
  37.       yoonoGlob.openUrlInNewWindow(url, event);
  38.       break;
  39.  
  40.     case 'current-window':
  41.       yoonoGlob.openUrlInCurrent(url, event);
  42.       break;
  43.  
  44.     case 'new-tab':
  45.       yoonoGlob.openUrlInNewTab(url, event);
  46.       break;
  47.  
  48.     // according to ff's default
  49.     default:
  50.       var win = yoonoGlob.WMED.getMostRecentWindow("navigator:browser");
  51.       win.openUILink(url, event, false, true);
  52.       break;
  53.   }
  54. }
  55.  
  56. // Ouverture d'une URL dans le tab courant
  57. yoonoGlob.openUrlInCurrent = function(url, event) {
  58.   var win = yoonoGlob.WMED.getMostRecentWindow("navigator:browser");
  59.   win.openUILinkIn(url, 'current');
  60. }
  61.  
  62. // Ouverture d'une URL dans nouvo tab
  63. yoonoGlob.openUrlInNewTab = function(url, event) {
  64.   try {
  65.     var win = yoonoGlob.WMED.getMostRecentWindow("navigator:browser");
  66.     var target = 'tab';
  67.     // on slow computers, the test below might result in overwritting
  68.     // a tab that should otherwise have been initialized to a start page
  69.     //var doc = win.getBrowser().contentDocument;
  70.     //var currentUrl = doc.location.href ;
  71.     //if('about:blank' == currentUrl) {
  72.     //target = 'current';
  73.     //}
  74.     win.openUILinkIn(url, target);
  75.   } catch(e) {
  76.     YOONO_LOG.exception(e);
  77.   }
  78. }
  79.  
  80. // Ouverture d'une URL dans nouvelle fenetre
  81. yoonoGlob.openUrlInNewWindow = function(url, event) {
  82.   var win = yoonoGlob.WMED.getMostRecentWindow("navigator:browser");
  83.   win.openUILinkIn(url, 'window');
  84. }
  85.  
  86. yoonoGlob.openUrlWithHeaders = function(url, headers, event) {
  87.   var win = yoonoGlob.WMED.getMostRecentWindow("navigator:browser");
  88.   var nav = win.getWebNavigation();
  89.   var MIME_STREAM_CID = "@mozilla.org/network/mime-input-stream;1";
  90.   var nsIMIMEInputStream = YOONO_CI.nsIMIMEInputStream;
  91.   var mis = YOONO_CL[MIME_STREAM_CID];
  92.   var aHeaders = mis.createInstance(nsIMIMEInputStream);
  93.   for (var i in headers) {
  94.     aHeaders.addHeader(i, headers[i]);
  95.   }
  96.     // todo : open in tab according to mouse button. Pb : sending headers !
  97.   nav.loadURI(url, 0, null, null, aHeaders);
  98. }
  99.  
  100. // Affichage d'un ptit bandeau indiquant le favori dont est issu le site proposΘ ou que synchro effectuΘe, ...
  101. yoonoGlob.messageinfos = {
  102.   timer : Components.classes['@mozilla.org/timer;1'].createInstance(Components.interfaces.nsITimer),
  103.   delay : 10,  // en secondes
  104.  
  105.   message: function (browserparent) {
  106.     for (var i = browserparent.childNodes.length; i-- > 0;) {
  107.       if (browserparent.childNodes[i].nodeName == "yoonomessage")
  108.         return browserparent.childNodes[i];
  109.     }
  110.     return false;
  111.   },
  112.  
  113.   showmessage: function (type, text1, text2) {
  114.     try {
  115.       var browser = getBrowser().selectedBrowser;
  116.       var browserParent = browser.parentNode;
  117.       var message = this.message(browserParent);
  118.  
  119.       if (!message) {
  120.         yoonoGlob.debug('creation message');
  121.         message = document.createElement("yoonomessage");
  122.         browserParent.insertBefore(message, browser);
  123.       }
  124.  
  125.       message.setAttribute('type', type);
  126.       message.text1 = text1;
  127.       if (text2) {
  128.         message.text2 = text2;
  129.       }
  130.  
  131.       browser.isShowingMessage = true;
  132.       message.hidden = false;
  133.  
  134.       var event = document.createEvent("Events");
  135.       event.initEvent("AlertActive", true, true);
  136.       message.dispatchEvent(event);
  137.     } catch(e) {
  138.       YOONO_LOG.exception(e);
  139.     }
  140.  
  141.   },
  142.  
  143.   hidemessage: function () {
  144.     var browser = getBrowser().selectedBrowser;
  145.     var browserParent = browser.parentNode;
  146.     var message = this.message(browserParent);
  147.     message.hidden = true;
  148.   },
  149.  
  150.   init : function (type, text1, text2) {
  151.     try {
  152.       this.timer.cancel();
  153.       this.showmessage(type, text1, text2);
  154.       this.timer.init(this, this.delay * 1000, this.timer.TYPE_ONE_SHOT);
  155.     } catch(e) {
  156.       YOONO_LOG.exception(e);
  157.     }
  158.   },
  159.  
  160.   observe : function(subject, topic, data) {
  161.     this.hidemessage();
  162.   }
  163. }
  164.  
  165. // Fonction "surprise" qui ne bloque pas le navigateur
  166. // pendant la recherche d'une suggestion (avec des retry et tout)
  167. yoonoGlob.randomPageInit = function(evt, origin, openMode) {
  168.   try {
  169.     YOONO_CMPT.addStat(['clic', 'surprise', origin]);
  170.     // flag so that popups do not trigger the autorandom call
  171.     YOONO_CMPT._autorandomDone = true;
  172.     yoonoGlob.openUrlAccordingToPref('chrome://yoono/content/random.xul', evt, openMode);
  173.   } catch(e) {
  174.     YOONO_LOG.exception(e);
  175.   }
  176. }
  177.  
  178. // Fonction appelΘe au lancement de FF si la pref autorandom est α true
  179. // Attend que la synchro soit terminΘe
  180. yoonoGlob.autorandom = function() {
  181.   // if done already, exit (popups)
  182.   if (YOONO_CMPT._autorandomDone) return;
  183.   YOONO_LOG.debug('Retrying autorandom');
  184.   // Wait for some stuff to be ready (namely list of bkms urls)
  185.   if(YOONO_CMPT.inprogress()) {
  186.     setTimeout(yoonoGlob.autorandom, 200);
  187.     return;
  188.   }
  189.   // flag so that popups do not trigger the autorandom call
  190.   YOONO_CMPT._autorandomDone = true;
  191.   YOONO_CMPT.addStat(['autosurprise']);
  192.   yoonoGlob.openUrlInNewTab('chrome://yoono/content/random.xul', null);
  193. }
  194.